package com.exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Demo01 {
    //        printArr(null);


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的出生年月日(例如：2000年01月01): ");
        String birthday = sc.nextLine();
        getDays(birthday, sc);
    }

    // 运行时异常：因为在运行时才会发生，所以在方法后面可以不写异常声明
    // 如果声明多个异常有父字类关系，那么只要声明一个父类即可（多态）
    public static void printArr(int[] arr) throws NullPointerException, ArrayIndexOutOfBoundsException,
            StringIndexOutOfBoundsException, IndexOutOfBoundsException {
        // ...
    }

    // 编译时异常：因为在编译时就会进行检查，所以必须要写在方法后面进行显示声明异常，否认编译不通过
    public static void stringToDate(String s) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(s);
        System.out.println(date);
    }

    public static void getDays(String s, Scanner scanner) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        try {
            Date date = sdf.parse(s);
            long from = date.getTime();
            long now = new Date().getTime();
            long delta = now - from;
            int day = (int) (delta / (1000L * 60 * 60 * 24));
            System.out.println("你已经在地球上生活了" + day);
        } catch (ParseException e) {
            System.out.println("你输入的生日日期格式不正确，请重新输入(例如：2000年01月01): ");
            s = scanner.nextLine();
            getDays(s, scanner);
        }
    }

    public static void getDays(String s) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(s);

        long from = date.getTime();
        long now = new Date().getTime();
        long delta = now - from;

        int day = (int) (delta / (1000L * 60 * 60 * 24));
        System.out.println("你已经在地球上生活了 " + day + "天");
    }
}
